class NxScenex : public NxScene
{
public:
	NxScene *myptr;
	NxScenex(NxScene *ptr) { myptr = ptr; };

	virtual								~NxScenex() { myptr = NULL; };
	virtual bool						saveToDesc(NxSceneDesc& desc) const;
	virtual NxU32						getFlags() const;
	virtual NxSimulationType			getSimType() const;
	virtual void*						getInternal(void);
	virtual void						setGravity(const NxVec3& vec);
	virtual void						getGravity(NxVec3& vec);
	virtual NxActor*					createActor(const NxActorDescBase& desc);
	virtual void						releaseActor(NxActor& actor);
	virtual NxJoint*					createJoint(const NxJointDesc &jointDesc);
	virtual void						releaseJoint(NxJoint &joint);
	virtual NxSpringAndDamperEffector*	createSpringAndDamperEffector(const NxSpringAndDamperEffectorDesc& springDesc);
	virtual NxEffector*					createEffector(const NxEffectorDesc& desc);
	virtual void						releaseEffector(NxEffector& effector);
	virtual NxForceField*				createForceField(const NxForceFieldDesc& forceFieldDesc);
	virtual void						releaseForceField(NxForceField& forceField);
	virtual NxU32						getNbForceFields() const;
	virtual NxForceField**				getForceFields();
	virtual NxForceFieldLinearKernel*	createForceFieldLinearKernel(const NxForceFieldLinearKernelDesc& kernelDesc);
	virtual void						releaseForceFieldLinearKernel(NxForceFieldLinearKernel& kernel);
	virtual NxU32						getNbForceFieldLinearKernels() const;
	virtual void						resetForceFieldLinearKernelsIterator();
	virtual NxForceFieldLinearKernel*	getNextForceFieldLinearKernel();
	virtual NxForceFieldShapeGroup*		createForceFieldShapeGroup(const NxForceFieldShapeGroupDesc& desc);
	virtual void						releaseForceFieldShapeGroup(NxForceFieldShapeGroup& group);
	virtual NxU32						getNbForceFieldShapeGroups() const;
	virtual void						resetForceFieldShapeGroupsIterator();
	virtual NxForceFieldShapeGroup*		getNextForceFieldShapeGroup();
	virtual NxForceFieldVariety			createForceFieldVariety();
	virtual NxForceFieldVariety			getHighestForceFieldVariety() const;
	virtual void						releaseForceFieldVariety(NxForceFieldVariety var);
	virtual NxForceFieldMaterial		createForceFieldMaterial();
	virtual NxForceFieldMaterial		getHighestForceFieldMaterial() const;
	virtual void						releaseForceFieldMaterial(NxForceFieldMaterial mat);
	virtual NxReal						getForceFieldScale(NxForceFieldVariety var, NxForceFieldMaterial mat);
	virtual void						setForceFieldScale(NxForceFieldVariety var, NxForceFieldMaterial mat, NxReal val);
	virtual NxMaterial*					createMaterial(const NxMaterialDesc &matDesc);
	virtual void						releaseMaterial(NxMaterial &material);
	virtual NxCompartment*				createCompartment(const NxCompartmentDesc &compDesc);
	virtual NxU32						getNbCompartments() const;
	virtual NxU32						getCompartmentArray(NxCompartment ** userBuffer, NxU32 bufferSize, NxU32 & usersIterator) const;
	virtual void						setActorPairFlags(NxActor& actorA, NxActor& actorB, NxU32 nxContactPairFlag);
	virtual NxU32						getActorPairFlags(NxActor& actorA, NxActor& actorB) const;
	virtual void						setShapePairFlags(NxShape& shapeA, NxShape& shapeB, NxU32 nxContactPairFlag);
	virtual NxU32						getShapePairFlags(NxShape& shapeA, NxShape& shapeB) const;
	virtual NxU32						getNbPairs() const;
	virtual NxU32						getPairFlagArray(NxPairFlag* userArray, NxU32 numPairs) const;
	virtual void						setGroupCollisionFlag(NxCollisionGroup group1, NxCollisionGroup group2, bool enable);
	virtual bool						getGroupCollisionFlag(NxCollisionGroup group1, NxCollisionGroup group2) const;
	virtual void						setDominanceGroupPair(NxDominanceGroup group1, NxDominanceGroup group2, NxConstraintDominance & dominance);
	virtual NxConstraintDominance		getDominanceGroupPair(NxDominanceGroup group1, NxDominanceGroup group2) const;
	virtual void						setActorGroupPairFlags(NxActorGroup group1, NxActorGroup group2, NxU32 flags);
	virtual NxU32						getActorGroupPairFlags(NxActorGroup group1, NxActorGroup group2) const;
	virtual NxU32						getNbActorGroupPairs() const;
	virtual NxU32						getActorGroupPairArray(NxActorGroupPair * userBuffer, NxU32 bufferSize, NxU32 & userIterator) const;
	virtual void						setFilterOps(NxFilterOp op0, NxFilterOp op1, NxFilterOp op2);
	virtual void						setFilterBool(bool flag);
	virtual void						setFilterConstant0(const NxGroupsMask& mask);
	virtual void						setFilterConstant1(const NxGroupsMask& mask);
	virtual void						getFilterOps(NxFilterOp& op0, NxFilterOp& op1, NxFilterOp& op2) const;
	virtual bool						getFilterBool() const;
	virtual NxGroupsMask				getFilterConstant0() const;
	virtual NxGroupsMask				getFilterConstant1() const;
	virtual NxU32						getNbActors() const;
	virtual NxActor**					getActors();
	virtual NxActiveTransform*			getActiveTransforms(NxU32 &nbTransformsOut);
	virtual NxU32						getNbStaticShapes() const;
	virtual NxU32						getNbDynamicShapes() const;
	virtual NxU32						getTotalNbShapes() const;
	virtual NxU32						getNbJoints() const;
	virtual void						resetJointIterator();
	virtual NxJoint*					getNextJoint();
	virtual NxU32						getNbEffectors() const;
	virtual void						resetEffectorIterator();
	virtual NxEffector*					getNextEffector();
	virtual NxU32						getBoundForIslandSize(NxActor& actor);
	virtual NxU32						getIslandArrayFromActor(NxActor& actor, NxActor** userBuffer, NxU32 bufferSize, NxU32& userIterator);
	virtual NxU32						getNbMaterials() const;
	virtual NxU32						getMaterialArray(NxMaterial ** userBuffer, NxU32 bufferSize, NxU32 & usersIterator);
	virtual NxMaterialIndex				getHighestMaterialIndex() const;
	virtual NxMaterial*					getMaterialFromIndex(NxMaterialIndex matIndex);
	virtual void						flushStream();
	virtual void						setTiming(NxReal maxTimestep=1.0f/60.0f, NxU32 maxIter=8, NxTimeStepMethod method=NX_TIMESTEP_FIXED);
	virtual void						getTiming(NxReal& maxTimestep, NxU32& maxIter, NxTimeStepMethod& method, NxU32* numSubSteps=NULL) const;
	virtual const NxDebugRenderable*	getDebugRenderable();
	virtual NxPhysicsSDK&				getPhysicsSDK();
	virtual void						getStats(NxSceneStats& stats) const;
	virtual const NxSceneStats2*		getStats2() const;
	virtual void						getLimits(NxSceneLimits& limits) const;
	virtual void						setMaxCPUForLoadBalancing(NxReal cpuFraction);
	virtual NxReal						getMaxCPUForLoadBalancing();
	virtual void						setUserNotify(NxUserNotify* callback);
	virtual NxUserNotify*				getUserNotify() const;
	virtual void						setFluidUserNotify(NxFluidUserNotify* callback);
	virtual NxFluidUserNotify*			getFluidUserNotify() const;
	virtual void						setClothUserNotify(NxClothUserNotify* callback);
	virtual NxClothUserNotify*			getClothUserNotify() const;
	virtual void						setSoftBodyUserNotify(NxSoftBodyUserNotify* callback);
	virtual NxSoftBodyUserNotify*		getSoftBodyUserNotify() const;
	virtual void						setUserContactModify(NxUserContactModify* callback);
	virtual NxUserContactModify*		getUserContactModify() const;
	virtual void						setUserTriggerReport(NxUserTriggerReport* callback);
	virtual NxUserTriggerReport*		getUserTriggerReport() const;
	virtual void						setUserContactReport(NxUserContactReport* callback);
	virtual NxUserContactReport*		getUserContactReport() const;
	virtual void						setUserActorPairFiltering(NxUserActorPairFiltering* callback);
	virtual NxUserActorPairFiltering*	getUserActorPairFiltering() const;
	virtual bool						raycastAnyBounds(const NxRay& worldRay, NxShapesType shapesType, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, const NxGroupsMask* groupsMask=NULL) const;
	virtual bool						raycastAnyShape(const NxRay& worldRay, NxShapesType shapesType, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, const NxGroupsMask* groupsMask=NULL, NxShape** cache=NULL) const;
	virtual NxU32						raycastAllBounds(const NxRay& worldRay, NxUserRaycastReport& report, NxShapesType shapesType, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, NxU32 hintFlags=0xffffffff, const NxGroupsMask* groupsMask=NULL) const;
	virtual NxU32						raycastAllShapes(const NxRay& worldRay, NxUserRaycastReport& report, NxShapesType shapesType, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, NxU32 hintFlags=0xffffffff, const NxGroupsMask* groupsMask=NULL) const;
	virtual NxShape*					raycastClosestBounds(const NxRay& worldRay, NxShapesType shapeType, NxRaycastHit& hit, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, NxU32 hintFlags=0xffffffff, const NxGroupsMask* groupsMask=NULL) const;
	virtual NxShape*					raycastClosestShape(const NxRay& worldRay, NxShapesType shapeType, NxRaycastHit& hit, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, NxU32 hintFlags=0xffffffff, const NxGroupsMask* groupsMask=NULL, NxShape** cache=NULL) const;
	virtual NxU32						overlapSphereShapes(const NxSphere& worldSphere, NxShapesType shapeType, NxU32 nbShapes, NxShape** shapes, NxUserEntityReport<NxShape*>* callback, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL, bool accurateCollision=false);
	virtual NxU32						overlapAABBShapes(const NxBounds3& worldBounds, NxShapesType shapeType, NxU32 nbShapes, NxShape** shapes, NxUserEntityReport<NxShape*>* callback, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL, bool accurateCollision=false);
	virtual NxU32						overlapOBBShapes(const NxBox& worldBox, NxShapesType shapeType, NxU32 nbShapes, NxShape** shapes, NxUserEntityReport<NxShape*>* callback, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL, bool accurateCollision=false);
	virtual NxU32						overlapCapsuleShapes(const NxCapsule& worldCapsule, NxShapesType shapeType, NxU32 nbShapes, NxShape** shapes, NxUserEntityReport<NxShape*>* callback, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL, bool accurateCollision=false);
	virtual NxSweepCache*				createSweepCache();
	virtual void						releaseSweepCache(NxSweepCache* cache);
	virtual NxU32						linearOBBSweep(const NxBox& worldBox, const NxVec3& motion, NxU32 flags, void* userData, NxU32 nbShapes, NxSweepQueryHit* shapes, NxUserEntityReport<NxSweepQueryHit>* callback, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL);
	virtual NxU32						linearCapsuleSweep(const NxCapsule& worldCapsule, const NxVec3& motion, NxU32 flags, void* userData, NxU32 nbShapes, NxSweepQueryHit* shapes, NxUserEntityReport<NxSweepQueryHit>* callback, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL);
	virtual NxU32						cullShapes(NxU32 nbPlanes, const NxPlane* worldPlanes, NxShapesType shapeType, NxU32 nbShapes, NxShape** shapes, NxUserEntityReport<NxShape*>* callback, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL);
	virtual bool						checkOverlapSphere(const NxSphere& worldSphere, NxShapesType shapeType=NX_ALL_SHAPES, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL);
	virtual bool						checkOverlapAABB(const NxBounds3& worldBounds, NxShapesType shapeType=NX_ALL_SHAPES, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL);
	virtual bool						checkOverlapOBB(const NxBox& worldBox, NxShapesType shapeType=NX_ALL_SHAPES, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL);
	virtual bool						checkOverlapCapsule(const NxCapsule& worldCapsule, NxShapesType shapeType=NX_ALL_SHAPES, NxU32 activeGroups=0xffffffff, const NxGroupsMask* groupsMask=NULL);
	virtual NxFluid*					createFluid(const NxFluidDescBase& fluidDesc);
	virtual void						releaseFluid(NxFluid& fluid);
	virtual NxU32						getNbFluids() const;
	virtual NxFluid**					getFluids();
	virtual bool						cookFluidMeshHotspot(const NxBounds3& bounds, NxU32 packetSizeMultiplier, NxReal restParticlesPerMeter, NxReal kernelRadiusMultiplier, NxReal motionLimitMultiplier, NxReal collisionDistanceMultiplier, NxCompartment* compartment = NULL, bool forceStrictCookingFormat = false);
	virtual NxCloth*					createCloth(const NxClothDesc& clothDesc);
	virtual void						releaseCloth(NxCloth& cloth);
	virtual NxU32						getNbCloths() const;
	virtual NxCloth**					getCloths();
	virtual NxSoftBody*					createSoftBody(const NxSoftBodyDesc& softBodyDesc);
	virtual void						releaseSoftBody(NxSoftBody& softBody);
	virtual NxU32						getNbSoftBodies() const;
	virtual NxSoftBody**				getSoftBodies();
	virtual bool						isWritable();
	virtual void						simulate(NxReal elapsedTime);
	virtual bool						checkResults(NxSimulationStatus status, bool block = false);
	virtual bool						fetchResults(NxSimulationStatus status, bool block = false, NxU32 *errorState = 0);
	virtual void						flushCaches();
	virtual const NxProfileData*		readProfileData(bool clearData);
	virtual NxThreadPollResult			pollForWork(NxThreadWait waitType);
	virtual void						resetPollForWork();
	virtual NxThreadPollResult			pollForBackgroundWork(NxThreadWait waitType);
	virtual void						shutdownWorkerThreads();
	virtual void						lockQueries();
	virtual void						unlockQueries();
	virtual NxSceneQuery*				createSceneQuery(const NxSceneQueryDesc& desc);
	virtual bool						releaseSceneQuery(NxSceneQuery& query);
	virtual void						setDynamicTreeRebuildRateHint(NxU32 dynamicTreeRebuildRateHint);
	virtual NxU32						getDynamicTreeRebuildRateHint() const;
	virtual void						setSolverBatchSize(NxU32 solverBatchSize);
	virtual NxU32						getSolverBatchSize() const;
};